﻿#include <iostream>
#include <map>
#include <string>
#include <utility>
using namespace std;
/*
C++ STL关联容器 Map
*/
class StlExample
{
public:
    void testMap();
	



};

void StlExample::testMap() {
    map<string, string>MyMap;
    MyMap["http://1.ccc"] = "C语言教程";
    MyMap["http://2.ccc"] = "C++教程";
    MyMap["http://3.ccc"] = "Python教程";

    for (map<string, string>::iterator it = MyMap.begin(); it != MyMap.end(); ++it)
    {
        cout << it->first << "=>" << it->second << "\n";
    }
    //默认构造函数
    pair<string, double>pair1;
    //第二种构造函数
    pair<string, string>pair2("STL教程", "http://stl");
    //拷贝构造函数
    pair<string, string>pair3(pair2);
    //移动构造函数
    pair<string, string>pair4(make_pair("C++教程", "https://c++"));
    //第五种构造函数
    pair<string, string>pair5(string("Python教程"), string("http://python"));

    cout << "pair1: " << pair1.first << " " << pair1.second << endl;
    cout << "pair2: " << pair2.first << " " << pair2.second << endl;
    cout << "pair3: " << pair3.first << " " << pair3.second << endl;
    cout << "pair4: " << pair4.first << " " << pair4.second << endl;
    cout << "pair5: " << pair5.first << " " << pair5.second << endl;
    //Map的访问
    map<string, string> strMap{
        {"STL","STL教程"},
        {"C++","C++教程"},
        {"Java","Java教程"}
    };
    string value = strMap["STL"];
    cout << value << endl;
    /*
    注意，只有当 map 容器中确实存有包含该指定键的键值对，
    借助重载的 [ ] 运算符才能成功获取该键对应的值；
    反之，若当前 map 容器中没有包含该指定键的键值对，则此时使用 [ ] 运算符将不再是访问容器中的元素，
    而变成了向该 map 容器中增添一个键值对。
    其中，该键值对的键用 [ ] 运算符中指定的键，其对应的值取决于 map 容器规定键值对中值的数据类型，
    如果是基本数据类型，
    则值为 0；如果是 string 类型，其值为 ""，即空字符串（即使用该类型的默认值作为键值对的值）。
    */
    std::map<string, string>nMap;
    nMap["STL教程"] = "http://c.biancheng.net/java/";
    nMap["Python教程"] = "http://c.biancheng.net/python/";
    nMap["STL教程"] = "http://c.biancheng.net/stl/";
    for (auto i = nMap.begin(); i != nMap.end(); ++i) {
        cout << i->first << " " << i->second << endl;
    }
    //添加新键值对
    nMap["C#教程"] = "http://C#";
    //修改键值对
    nMap["STL教程"] = "http://stl";
}

int main()
{
    StlExample exp;
    exp.testMap();
}


